package com.z.utils;

import org.apache.commons.io.output.FileWriterWithEncoding;

import java.io.*;
import java.util.ResourceBundle;

public class IOUtil {

	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：把一个字串写入指定文件
	 * 
	 * 参数一：String (要写入的字符串)
	 * 参数二：String（文件的绝对地址）
	 * 
	 */
	public void writeStirngToFile(String str,String filePathA){
		
		ObjectOutputStream out;
		try {
			out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filePathA)));
			out.writeUTF(str);	
			out.flush();
			out.close();
			out = null;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：从文件中读取字符串，和上边方法writeStirngToFile用是对应流，就是要读出writeStirngToFile方法写进去的内容
	 * 
	 * 参　数：String（文件的绝对地址）
	 * 
	 * 返加值：返回从文件中读取到的字符串；
	 */
	public String readStirngToFile(String filePathA){
		
		ObjectInputStream in;
		String ss = null;
		try {
			in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePathA)));
			ss = in.readUTF();
			in.close();
			in = null;
			return ss;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return ss;
		
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：读取文件中的内容，按行一行一行读，按指定的编码格式
	 * 
	 * 参　数：
	 * filePathA　String（文件的绝对地址）
	 * codeName	　String（编码方式：utf-8,gbk等）
	 * 
	 * 返加值：返回从文件中读取到的字符串；
	 */
	public static String readStirngToFile(String filePathA, String codeName){
		BufferedReader  in;
		StringBuffer ss = new StringBuffer("");
		try {
			in = new BufferedReader(new InputStreamReader(new FileInputStream(filePathA),codeName),1024);
			String readLineStr = null;
			while((readLineStr=in.readLine()) != null){
				ss.append(readLineStr+" ");
			}
			//ss = in.readLine();
			in.close();
			in = null;
			return ss.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return ss.toString();
	
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：读取文件中的内容，按行一行一行读，以utf-8编码格式
	 * 
	 * 参　数：
	 * filePathA　String（文件的绝对地址）
	 * 
	 * 返加值：返回从文件中读取到的字符串；
	 */
	public static String readStirngFromFileUTF8(String filePathA){
		

		return readStirngToFile(filePathA,"UTF-8");
	
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：把一个对象写入指定文件
	 * 
	 * 参数一：Object (要写入的对象）
	 * 参数二：String（文件的绝对地址）
	 * 
	 */
	public void writeObjectToFile(Object ob,String filePathA){
		
		ObjectOutputStream out;
		try {
			out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filePathA)));
			out.writeObject(ob);
			out.flush();
			out.close();
			out = null;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：读取文件中的对象
	 * 
	 * 参数一：文件的绝对路径
	 * 
	 * 返加值：Object对象(从指定文件中读到的对象)
	 */
	public Object getObjectToFile(String filePath){
		
		ObjectInputStream in;
		Object ob = null;
		try {
			in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePath)));
			ob = in.readObject();
			in.close();
			in = null;
			//取出对象后,删除文件------
			File f = new File(filePath);
			f.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ob;
	}
	
	/**
	 * 作　　者：张雨
	 * 
	 * 功能说明：读取properties文件中的某键对应的值
	 * 
	 * 参数一：properties文件的相对路径——————
	 * 			不是从项目的根目录开始，是和src同一级的目录为初始目录,
	 * 			对于web项目则只要保证它发布后会以class文件夹中生成Ｈ此yy文件（注意不需要加文件的后缀名）
	 * 参数二：properties文件中的键值
	 * 
	 * 返回值：字符串(properties文件中指定的键值对应的Value值)
	 */
	@SuppressWarnings("static-access")
	public static String getProperValue(String FileNmae,String key){
		
		String filePath = null;
		
		ResourceBundle pd = ResourceBundle.getBundle(FileNmae);
		filePath = pd.getString(key);
		pd.clearCache();
		pd = null;
		
		return filePath;
	}


	/**
	 * 将指定的文本写入文件
	 * @param filePath
	 * @param content
	 * @throws IOException
	 */
	public static final void writeFLine(String filePath,String content) throws IOException {
		FileWriterWithEncoding fw = null;
		try {
			fw = new FileWriterWithEncoding(filePath, "UTF-8", true);
//			String c = "abs" + "/r/n";
			fw.write(content);
			fw.close();
			fw = null;
		} catch (IOException e1) {
			e1.printStackTrace();
			System.out.println("写入失败");
		}
	}

	/**
	 * 将指定的文本写入文件
	 * @param filePath
	 * @param content
	 */
	public static final void writeToFLine(String filePath,String content) {
		FileWriterWithEncoding fw = null;
		try {
			fw = new FileWriterWithEncoding(filePath, "UTF-8", true);
//			String c = "abs" + "/r/n";
			fw.write(content);
			fw.close();
			fw = null;
		} catch (IOException e1) {
			e1.printStackTrace();
			System.out.println("写入失败，" + e1.getMessage());
			
		}
	}

}
